package one.stand.service;

import one.stand.model.ResultModel;
import one.stand.request.*;
import one.stand.response.OrdersResponse;

import java.util.List;
import java.util.Map;

/**
 * @author Administrator
 */
public interface OrdersService {

    /**
     * 保存商品到购物车
     */
    ResultModel selectShopcart(ShopcartRequest shopcartRequest);

    /**
     * 保存商品到购物车
     */
    ResultModel addShopcart(ShopcartRequest shopcartRequest);

    /**
     * 删除购物车商品
     */
    ResultModel delShopcart(ShopcartRequest shopcartRequest);

    /**
     * 修改购物车商品数量
     */
    ResultModel updShopcartNum(ShopcartRequest shopcartRequest);

    /**
     * 商品直接下单
     */
    ResultModel directOrder(OrderinfoRequest orderinfoRequest);

    /**
     * 查询用户订单信息
     */
    ResultModel<List<OrdersResponse>> getOrderList(OrdersRequest request);

    /**
     * 查询用户订单数量
     */
    ResultModel<List<Map<String, Object>>> getOrderListCount(OrdersRequest request);

    /**
     * 订单支付（回调）
     */
    String paymentOrders(String notifyData);

    /**
     * 去支付(old)
     * @param request
     * @return
     */
    ResultModel<Map<String, String>> goPay(OrdersRequest request);

    /**
     * 去支付(new)
     * @param request
     * @return
     */
    ResultModel<Map<String, String>> goPayNew(OrdersRequest request);

    /**
     * 去支付（下单未支付后再次支付）
     * @param request
     * @return
     */
    ResultModel<Map<String, String>> goTwoPay(OrdersRequest request);

    /**
     * 用户提交退款申请
     */
    ResultModel refundOrder(OrdersRequest ordersRequest);

    /**
     * 用户撤销退款申请
     */
    ResultModel backRefundState(OrdersRequest ordersRequest);

    /**
     * 购物车下单
     */
    ResultModel<String> shopcartOrder(ShopcartRequest shopcartRequest);

    /**
     * 修改订单状态
     */
    ResultModel updateOrderState( OrdersRequest request) ;

    /**
     * 提醒发货
     */
    ResultModel doReminder( OrdersRequest request) ;

    /**
     * 再来一单
     */
    ResultModel anotherOrder( OrdersRequest request);

    /**
     * 购物车添加收藏
     */
    ResultModel shopAddCollection( CollectionRequest request);

    /**
     * 订单详情
     */
    ResultModel<List<OrdersResponse>> getOrderInfo( OrdersRequest request);

    /**
     * 待付款时订单详情
     */
    ResultModel<List<OrdersResponse>> getPayOrderInfo( OrdersRequest request);

    /**
     * 开团/参团
     */
    ResultModel<Integer> openOrJoinAssemble(AssembleRequest request);

    /**
     * 分销金额提成 (确认收货时调用)
     * */
    void companyRoyalty(Integer ordersId, String ip, String companyKey);

    /**
     * 分销金额提成 (确认收货时调用) （3.2版本迭代）
     * */
    void companyRoyaltyNew(Integer ordersId, String ip, String companyKey);
}